package com.yuw.exceptiondemo;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.util.Scanner;

public class TestDriver {

	public static void main(String[] args) throws FileNotFoundException   {
		
		test06();
//		System.out.println("================test05==============");
//		 test05();
//		 
//		System.out.println("================================");
//		try {
//			test04();
//		} catch (Exception e) {
//			// TODO Auto-generated catch block
//			e.printStackTrace();
//		}
	}

	/**
	 * 面试题：finally 和 return 的执行先后问题
	 */
	private static void test06() {
		// 创建一个文件输入流对象
		try {
			// InputStream is = new FileInputStream("");
			InputStream is = new FileInputStream("D:\\mytemp\\zb201807\\HelloWorld.java");
			return; // 返回上层调用者
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return; // 返回上层调用者
		} finally {
			System.out.println("执行了finally部分...");
			return;
		}
	}
	
	/**
	 * 非检查性异常【运行时异常】
	 * @throws FileNotFoundException 
	 */
	private static void test05() throws FileNotFoundException {
		// 数组越界问题
		int i = 0;
		int j = 10;
		if(i == 0){
			// 手动抛出一个异常: 注意：此处抛出的是一个非检查性异常，上层调用者可以不进行异常处理
			//throw new ArithmeticException("除数为0异常"); // throw之后的代码不会再被执行
			// 如果抛出一个检查性的异常，则上调用者必须进行异常处理
			throw new FileNotFoundException("文件找不到~~~~");
		}
		int k = j / i;
		System.out.println("计算完成。。。");
	}
	
	/**
	 * 检查性异常【非运行时异常】
	 * @throws FileNotFoundException 
	 * @throws ClassNotFoundException 
	 */
	private static void test04() throws Exception , FileNotFoundException, ClassNotFoundException, Exception {
		// 创建一个文件输入流对象

		// InputStream is = new FileInputStream("");
		InputStream is = new FileInputStream("D:\\mytemp\\zb201807\\HelloWorld.java");
		Class.forName("");

	}

	// 课堂练习：输入一个字符串，不能使用String类的自带函数，计算该字符串的长度。

	private static void test03() {
		// 控制台输入
		Scanner sc = new Scanner(System.in);
		// 从控制台读入一行字符串
		System.out.println("请输入一串字符：");
		String strIn = sc.nextLine();
		// 判定字符串长度
		if (strIn != null) {
			// 通过异常的处理机制计算字符串长度
			// 字符串长度计数器
			int count = 0;
			try {
				while (true) {
					strIn.charAt(++count);
				}
			} catch (Exception e) {
				// 发生异常是说明字符个数统计结束
			}

			System.out.println("字符创长度为：" + count);
		}
	}

	/**
	 * 检查性异常【非运行时异常】 try-catch异常处理机制
	 */
	private static void test021() {
		// 创建一个文件输入流对象
		try {
			// InputStream is = new FileInputStream("");
			InputStream is = new FileInputStream("D:\\mytemp\\zb201807\\HelloWorld.java");
			Class.forName("");
		} catch (FileNotFoundException | ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			System.out.println("执行了finally部分...");
		}
	}

	/**
	 * 检查性异常【非运行时异常】
	 */
	private static void test02() {
		// 创建一个文件输入流对象
		try {
			// InputStream is = new FileInputStream("");
			InputStream is = new FileInputStream("D:\\mytemp\\zb201807\\HelloWorld.java");
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			System.out.println("执行了finally部分...");
		}
	}

	/**
	 * 非检查性异常【运行时异常】也可以使用try-catch异常处理机制进行处理
	 */
	private static void test011() {
		// 数组越界问题
		try {
			int i = 0;
			int j = 10;
			int k = j / i;
		} catch (Exception e) {
			// 异常处理
			System.out.println("发生了异常：" + e.getMessage());
			e.printStackTrace();
		}
		System.out.println("计算完成。。。");
	}

	/**
	 * 非检查性异常【运行时异常】
	 */
	private static void test01() {
		// 数组越界问题
		int i = 0;
		int j = 10;
		int k = j / i;
		System.out.println("计算完成。。。");
	}

}
